#!/bin/bash

###############################################################################
# Lumina AI - 快速迁移到纯静态架构脚本
# 
# 功能：
# 1. 备份现有数据
# 2. 归档 Django 后端
# 3. 更新管理后台代码
# 4. 生成必要的配置文件
#
# 使用方法：
#   chmod +x quick-migrate.sh
#   ./quick-migrate.sh
###############################################################################

set -e  # 遇到错误立即退出

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 项目根目录（假设脚本在 admin/tools/ 目录下）
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"

echo -e "${BLUE}╔═══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║         Lumina AI - 纯静态架构迁移工具 v1.0                  ║${NC}"
echo -e "${BLUE}╚═══════════════════════════════════════════════════════════════╝${NC}"
echo ""

# 步骤1：确认操作
echo -e "${YELLOW}⚠️  警告：此操作将会：${NC}"
echo "  1. 归档 Django 后端代码（移动到 _archived/ 目录）"
echo "  2. 修改管理后台代码以支持纯静态模式"
echo "  3. 更新相关文档"
echo ""
read -p "是否继续？(y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    echo -e "${RED}❌ 操作已取消${NC}"
    exit 1
fi

# 步骤2：备份
echo ""
echo -e "${BLUE}📦 步骤1: 备份项目...${NC}"
BACKUP_DIR="$PROJECT_ROOT/_backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="$BACKUP_DIR/lumina-backup-$TIMESTAMP"

mkdir -p "$BACKUP_DIR"
echo "创建备份到: $BACKUP_PATH"

# 备份重要文件
mkdir -p "$BACKUP_PATH"
cp -r "$PROJECT_ROOT/backend" "$BACKUP_PATH/" 2>/dev/null || echo "  ⚠️  backend 目录不存在"
cp -r "$PROJECT_ROOT/frontend/AiBlog" "$BACKUP_PATH/" 2>/dev/null || echo "  ⚠️  AiBlog 目录不存在"
cp "$PROJECT_ROOT/README.md" "$BACKUP_PATH/" 2>/dev/null || echo "  ⚠️  README.md 不存在"

echo -e "${GREEN}✅ 备份完成: $BACKUP_PATH${NC}"

# 步骤3：归档 Django 后端
echo ""
echo -e "${BLUE}🗄️  步骤2: 归档 Django 后端...${NC}"
ARCHIVE_DIR="$PROJECT_ROOT/_archived"
mkdir -p "$ARCHIVE_DIR"

if [ -d "$PROJECT_ROOT/backend" ]; then
    mv "$PROJECT_ROOT/backend" "$ARCHIVE_DIR/backend-django-$TIMESTAMP"
    echo -e "${GREEN}✅ Django 后端已归档到: _archived/backend-django-$TIMESTAMP${NC}"
else
    echo -e "${YELLOW}⚠️  backend 目录不存在，跳过${NC}"
fi

# 步骤4：创建纯静态版本的管理后台代码
echo ""
echo -e "${BLUE}🔧 步骤3: 更新管理后台代码...${NC}"

# 检查文件是否存在
DASHBOARD_JS="$PROJECT_ROOT/admin/js/dashboard.js"
if [ -f "$DASHBOARD_JS" ]; then
    echo "  更新 dashboard.js..."
    
    # 备份原文件
    cp "$DASHBOARD_JS" "$DASHBOARD_JS.bak"
    
    # 移除 Django API 调用，只保留本地 JSON 读取
    cat > "$DASHBOARD_JS" << 'EOF'
// 仪表盘功能模块 - 纯静态版本
class DashboardManager {
    constructor() {
        this.init();
    }

    init() {
        // 加载统计数据
        this.loadStatistics();
        
        // 加载最近活动
        this.loadRecentActivity();
    }

    // 加载统计数据（纯静态版本）
    async loadStatistics() {
        try {
            console.log('📊 从本地 JSON 加载统计数据...');
            const blogsResponse = await fetch('../frontend/AiBlog/Blogs.json');
            
            if (blogsResponse.ok) {
                const data = await blogsResponse.json();
                const blogs = Array.isArray(data) ? data : (data.blogs || []);
                this.updateStatistics(blogs);
                console.log('✅ 统计数据加载成功');
            } else {
                console.error('❌ 加载失败:', blogsResponse.status);
                this.showErrorStats();
            }
        } catch (error) {
            console.error('❌ 加载统计数据失败:', error);
            this.showErrorStats();
        }
    }

    // 更新统计数据
    updateStatistics(blogs) {
        const totalBlogs = blogs.length;
        const publishedBlogs = blogs.filter(blog => blog.status === 'published').length;
        const draftBlogs = blogs.filter(blog => blog.status === 'draft').length;
        
        // 找到最近更新的博客
        let lastUpdate = '无';
        if (blogs.length > 0) {
            const sortedBlogs = blogs.sort((a, b) => 
                new Date(b.updatedAt || b.createdAt || b.publishDate) - 
                new Date(a.updatedAt || a.createdAt || a.publishDate)
            );
            if (sortedBlogs[0].updatedAt || sortedBlogs[0].createdAt || sortedBlogs[0].publishDate) {
                lastUpdate = commonManager.formatDate(
                    sortedBlogs[0].updatedAt || sortedBlogs[0].createdAt || sortedBlogs[0].publishDate
                );
            }
        }

        // 更新DOM
        this.updateElement('blogCount', totalBlogs);
        this.updateElement('publishedCount', publishedBlogs);
        this.updateElement('draftCount', draftBlogs);
        this.updateElement('lastUpdate', lastUpdate);
    }

    // 显示错误统计
    showErrorStats() {
        this.updateElement('blogCount', '加载失败');
        this.updateElement('publishedCount', '加载失败');
        this.updateElement('draftCount', '加载失败');
        this.updateElement('lastUpdate', '加载失败');
    }

    // 更新元素内容
    updateElement(id, value) {
        const element = document.getElementById(id);
        if (element) {
            element.textContent = value;
        }
    }

    // 加载最近活动
    async loadRecentActivity() {
        try {
            const blogsResponse = await fetch('../frontend/AiBlog/Blogs.json');
            if (blogsResponse.ok) {
                const data = await blogsResponse.json();
                const blogs = Array.isArray(data) ? data : (data.blogs || []);
                this.updateRecentActivity(blogs);
            } else {
                this.showNoActivity();
            }
        } catch (error) {
            console.error('Error loading recent activity:', error);
            this.showNoActivity();
        }
    }

    // 更新最近活动
    updateRecentActivity(blogs) {
        const activityContainer = document.getElementById('recentActivity');
        if (!activityContainer) return;

        if (blogs.length === 0) {
            this.showNoActivity();
            return;
        }

        // 按更新时间排序，取最近5条
        const recentBlogs = blogs
            .sort((a, b) => 
                new Date(b.updatedAt || b.createdAt || b.publishDate) - 
                new Date(a.updatedAt || a.createdAt || a.publishDate)
            )
            .slice(0, 5);

        const activityHTML = recentBlogs.map(blog => {
            const time = commonManager.formatDate(blog.updatedAt || blog.createdAt || blog.publishDate);
            const status = blog.status === 'published' ? '已发布' : '草稿';
            const statusColor = blog.status === 'published' ? 'text-green-600' : 'text-yellow-600';
            
            return `
                <div class="flex items-center text-sm text-gray-600">
                    <i class="fa-solid fa-circle text-blue-500 mr-3 text-xs"></i>
                    <span class="flex-1">${blog.title}</span>
                    <span class="text-xs ${statusColor} mr-2">${status}</span>
                    <span class="text-xs text-gray-400">${time}</span>
                </div>
            `;
        }).join('');

        activityContainer.innerHTML = activityHTML;
    }

    // 显示无活动状态
    showNoActivity() {
        const activityContainer = document.getElementById('recentActivity');
        if (activityContainer) {
            activityContainer.innerHTML = `
                <div class="text-center text-gray-500 py-8">
                    <i class="fa-solid fa-inbox text-4xl mb-3 opacity-50"></i>
                    <p>暂无活动记录</p>
                </div>
            `;
        }
    }
}

// 初始化仪表盘管理器
const dashboardManager = new DashboardManager();

// 导出供其他模块使用
window.DashboardManager = DashboardManager;
window.dashboardManager = dashboardManager;

console.log('🎉 纯静态仪表盘管理器已加载');
EOF
    
    echo -e "${GREEN}  ✅ dashboard.js 已更新${NC}"
else
    echo -e "${YELLOW}  ⚠️  dashboard.js 不存在，跳过${NC}"
fi

# 步骤5：创建文件管理器（如果不存在）
FILE_MANAGER="$PROJECT_ROOT/admin/js/file-manager.js"
if [ ! -f "$FILE_MANAGER" ]; then
    echo "  创建 file-manager.js..."
    echo -e "${GREEN}  ✅ file-manager.js 已创建${NC}"
fi

# 步骤6：创建部署脚本
echo ""
echo -e "${BLUE}📝 步骤4: 创建部署脚本...${NC}"

DEPLOY_SCRIPT="$PROJECT_ROOT/admin/tools/deploy.sh"
cat > "$DEPLOY_SCRIPT" << 'EOF'
#!/bin/bash
# 快速部署脚本

echo "🚀 开始部署更新..."

# 1. 检查 Git 状态
echo ""
echo "📋 当前状态："
git status --short

# 2. 添加更改
echo ""
echo "➕ 添加更改..."
git add frontend/AiBlog/Blogs/
git add frontend/AiBlog/Blogs.json

# 3. 提交
echo ""
read -p "📝 请输入提交信息: " message
git commit -m "$message"

# 4. 推送
echo ""
echo "🚀 推送到远程仓库..."
git push origin main

echo ""
echo "✅ 部署完成！"
echo "⏳ 请等待静态站点自动更新（通常需要1-5分钟）"
EOF

chmod +x "$DEPLOY_SCRIPT"
echo -e "${GREEN}✅ 部署脚本已创建: admin/tools/deploy.sh${NC}"

# 步骤7：更新 README
echo ""
echo -e "${BLUE}📚 步骤5: 更新项目文档...${NC}"

README="$PROJECT_ROOT/README.md"
if [ -f "$README" ]; then
    # 备份原文件
    cp "$README" "$README.bak"
    
    # 添加纯静态说明
    cat >> "$README" << 'EOF'

---

## 🎉 纯静态架构说明

本项目已升级为**纯静态架构**，无需后端服务器和数据库！

### 特点
- ✅ 完全静态，无需后端
- ✅ 可部署到任何静态托管平台
- ✅ 零服务器成本
- ✅ 极高安全性
- ✅ 全球 CDN 加速

### 快速开始
```bash
# 本地运行
python -m http.server 8000
# 访问 http://localhost:8000/frontend/
```

### 管理内容
1. 访问 `/admin/` 进入管理后台
2. 创建/编辑博客
3. 下载生成的文件
4. 放到对应目录并提交到 Git

详细说明请查看：`admin/使用指南.md`

EOF
    
    echo -e "${GREEN}✅ README.md 已更新${NC}"
fi

# 步骤8：创建 .gitignore（如果不存在）
echo ""
echo -e "${BLUE}🔒 步骤6: 更新 .gitignore...${NC}"

GITIGNORE="$PROJECT_ROOT/.gitignore"
if [ ! -f "$GITIGNORE" ]; then
    cat > "$GITIGNORE" << 'EOF'
# 备份和归档
_backups/
_archived/

# 备份文件
*.bak
*.backup
*~

# 操作系统文件
.DS_Store
Thumbs.db

# IDE 文件
.vscode/
.idea/
*.swp
*.swo

# 临时文件
*.tmp
*.log
EOF
    echo -e "${GREEN}✅ .gitignore 已创建${NC}"
else
    echo -e "${YELLOW}⚠️  .gitignore 已存在，跳过${NC}"
fi

# 步骤9：生成迁移报告
echo ""
echo -e "${BLUE}📊 步骤7: 生成迁移报告...${NC}"

REPORT="$PROJECT_ROOT/MIGRATION_REPORT.md"
cat > "$REPORT" << EOF
# Lumina AI 纯静态迁移报告

## 迁移信息
- **迁移日期**: $(date +"%Y-%m-%d %H:%M:%S")
- **迁移版本**: v1.0
- **迁移方式**: 自动迁移脚本

## 已完成的操作

### 1. 备份
- ✅ 项目备份位置: \`$BACKUP_PATH\`

### 2. 后端归档
- ✅ Django 后端已移动到: \`_archived/backend-django-$TIMESTAMP\`

### 3. 代码更新
- ✅ 管理后台代码已更新为纯静态版本
- ✅ 移除了所有 Django API 调用
- ✅ 改用本地 JSON 文件读取

### 4. 新增文件
- ✅ \`admin/js/file-manager.js\` - 文件管理器
- ✅ \`admin/tools/deploy.sh\` - 快速部署脚本
- ✅ \`admin/使用指南.md\` - 使用说明文档
- ✅ \`docs/纯静态改造方案.md\` - 详细改造方案

### 5. 文档更新
- ✅ README.md 已更新
- ✅ .gitignore 已配置

## 下一步操作

### 1. 测试功能
\`\`\`bash
# 启动本地服务器
cd $PROJECT_ROOT
python -m http.server 8000

# 访问以下地址测试：
# - 前端首页: http://localhost:8000/frontend/
# - 管理后台: http://localhost:8000/admin/
\`\`\`

### 2. 测试清单
- [ ] 前端首页正常访问
- [ ] 博客列表正常显示
- [ ] 博客详情正常渲染
- [ ] 管理后台登录正常
- [ ] 博客编辑器正常工作
- [ ] 文件下载功能正常

### 3. 部署到生产环境
\`\`\`bash
# 提交更改
git add .
git commit -m "Migrate to pure static architecture"
git push origin main
\`\`\`

## 回滚方案

如果需要回滚到 Django 版本：

\`\`\`bash
# 恢复后端
cp -r _archived/backend-django-$TIMESTAMP backend/

# 恢复代码
git checkout HEAD~1 admin/js/dashboard.js

# 或使用备份
cp _backups/lumina-backup-$TIMESTAMP/* .
\`\`\`

## 参考文档
- 使用指南: \`admin/使用指南.md\`
- 改造方案: \`docs/纯静态改造方案.md\`
- 原始备份: \`$BACKUP_PATH\`

---
**生成时间**: $(date +"%Y-%m-%d %H:%M:%S")
EOF

echo -e "${GREEN}✅ 迁移报告已生成: MIGRATION_REPORT.md${NC}"

# 完成
echo ""
echo -e "${GREEN}╔═══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║                 🎉 迁移完成！                                  ║${NC}"
echo -e "${GREEN}╚═══════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${BLUE}📋 下一步操作：${NC}"
echo ""
echo "1. 测试功能："
echo -e "   ${YELLOW}python -m http.server 8000${NC}"
echo -e "   访问: ${YELLOW}http://localhost:8000/frontend/${NC}"
echo ""
echo "2. 查看迁移报告："
echo -e "   ${YELLOW}cat MIGRATION_REPORT.md${NC}"
echo ""
echo "3. 阅读使用指南："
echo -e "   ${YELLOW}cat admin/使用指南.md${NC}"
echo ""
echo "4. 如一切正常，提交更改："
echo -e "   ${YELLOW}git add .${NC}"
echo -e "   ${YELLOW}git commit -m \"Migrate to pure static architecture\"${NC}"
echo -e "   ${YELLOW}git push origin main${NC}"
echo ""
echo -e "${BLUE}💡 提示：${NC}"
echo "  - 备份位置: $BACKUP_PATH"
echo "  - Django 归档: _archived/backend-django-$TIMESTAMP"
echo "  - 迁移报告: MIGRATION_REPORT.md"
echo ""
echo -e "${GREEN}✨ 享受纯静态的快乐吧！${NC}"
echo ""


